From 7e01d5502c3dbf46a6b1e50a8238c874aaa60cf5 Mon Sep 17 00:00:00 2001 From: robertlipe Date: Sun, 14 Dec 2014 21:29:22 +0000 Subject: [PATCH] Be more precise with buffer size in gbfread of a QString. Misc hyperactive warning cleanups. --- gpsbabel/dmtlog.cc | 2 +- gpsbabel/gbfile.cc | 23 ++++++++--------------- gpsbabel/mmo.cc | 8 ++++---- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/gpsbabel/dmtlog.cc b/gpsbabel/dmtlog.cc index 4a5679570..bccea5aa8 100644 --- a/gpsbabel/dmtlog.cc +++ b/gpsbabel/dmtlog.cc @@ -407,7 +407,7 @@ static void read_CTrackFile(const int version) { char buf[128]; - uint32_t ver; + int32_t ver; int32_t tcount, wcount; int16_t u1; int32_t ux; diff --git a/gpsbabel/gbfile.cc b/gpsbabel/gbfile.cc index a9b8a803e..4afd6e990 100644 --- a/gpsbabel/gbfile.cc +++ b/gpsbabel/gbfile.cc @@ -701,9 +701,9 @@ gbsize_t gbfread(QString& buf, const gbsize_t size, const gbsize_t members, gbfile* file) { - // xcalloc() ensures the buf is zero terminated, so it's a proper c string. - char* tmp = static_cast(xcalloc(members, size)); - gbsize_t retval = gbfread(tmp, size, members, file); + QByteArray tmp; + tmp.resize(members * size); + gbsize_t retval = gbfread(tmp.data(), size, members, file); buf = QString(tmp); return retval; } @@ -1024,19 +1024,12 @@ gbfgetcstr(gbfile* file) QString gbfgetpstr(gbfile* file) { - int len; - char* result; - - len = gbfgetc(file); - result = (char*) xmalloc(len + 1); - if (len > 0) { - gbfread(result, 1, len, file); - } - result[len] = '\0'; + int len = gbfgetc(file); + QByteArray ba; + ba.resize(len); + gbfread(ba.data(), 1, len, file); - QString r(result); - xfree(result); - return r; + return QString(ba); } static char* diff --git a/gpsbabel/mmo.cc b/gpsbabel/mmo.cc index 32f88ab58..d3fe913d1 100644 --- a/gpsbabel/mmo.cc +++ b/gpsbabel/mmo.cc @@ -164,15 +164,15 @@ mmo_readstr(void) // length is number of "characters" not number of bytes len = (unsigned)gbfgetc(fin); if (len > 0) { - unsigned int ii, jj, ch, resbytes=0; + unsigned int ch, resbytes=0; res = (char*) xmalloc(len*2 + 1); // bigger to allow for utf-8 expansion - for (ii=0; ii(len) != strlen(res)) { // strlen requires a size_t, but Microsoft's stupid compiler doesn't // do C99 %zd. Thanx, Microsoft. fprintf(stdout, "got len %d but str is '%s' (strlen %d)\n", len, res, (int) strlen(res)); -- 2.30.2